home *** CD-ROM | disk | FTP | other *** search
/ Aminet 40 / Aminet 40 (2000)(Schatztruhe)[!][Dec 2000].iso / Aminet / comm / tcp / Amster.lha / Amster_Install / Source / rexx.c < prev    next >
C/C++ Source or Header  |  2000-07-17  |  4KB  |  166 lines

  1. /*
  2. ** ARexx Support
  3. */
  4.  
  5. #include "include/config.h"
  6.  
  7. #include <stdio.h>
  8. #include <string.h>
  9. #include <stdlib.h>
  10. #include <stdarg.h>
  11.  
  12. #include <proto/exec.h>
  13. #include <proto/dos.h>
  14. #include <proto/rexxsyslib.h>
  15. #include <rexx/storage.h>
  16.  
  17. #include "include/msg.h"
  18. #include "include/mui.h"
  19. #include "include/search.h"
  20. #include "include/gui.h"
  21. #include "include/rexx.h"
  22. #include "amster_Cat.h"
  23.  
  24. MUIF rexx_con(REG(a0) struct Hook *h,REG(a2) Object *app, REG(a1) char **array);
  25. MUIF rexx_dis(REG(a0) struct Hook *h,REG(a2) Object *app, REG(a1) char **array);
  26. MUIF rexx_ison(REG(a0) struct Hook *h,REG(a2) Object *app, REG(a1) char **array);
  27. MUIF rexx_search(REG(a0) struct Hook *h,REG(a2) Object *app, REG(a1) char **array);
  28. MUIF rexx_sstat(REG(a0) struct Hook *h,REG(a2) Object *app, REG(a1) char **array);
  29. MUIF rexx_whois(REG(a0) struct Hook *h,REG(a2) Object *app, REG(a1) char **array);
  30. MUIF rexx_download(REG(a0) struct Hook *h,REG(a2) Object *app, REG(a1) char **array);
  31.  
  32. struct Hook rexx_conHook = { {0,0}, &rexx_con, NULL, NULL };
  33. struct Hook rexx_disHook = { {0,0}, &rexx_dis, NULL, NULL };
  34. struct Hook rexx_isonHook = { {0,0}, &rexx_ison, NULL, NULL };
  35. struct Hook rexx_searchHook = { {0,0}, &rexx_search, NULL, NULL };
  36. struct Hook rexx_sstatHook = { {0,0}, &rexx_sstat, NULL, NULL };
  37. struct Hook rexx_whoisHook = { {0,0}, &rexx_whois, NULL, NULL };
  38. struct Hook rexx_downloadHook = { {0,0}, &rexx_download, NULL, NULL };
  39.  
  40. struct MUI_Command rexx_cmds[] = {
  41.     { "connect", NULL, 0, &rexx_conHook },
  42.     { "disconnect", NULL, 0, &rexx_disHook },
  43.     { "isonline", NULL, 0, &rexx_isonHook },
  44.     { "search", "TITLE/A,STEM/A", 2, &rexx_searchHook },
  45.     { "searchstate", NULL, 0, &rexx_sstatHook },
  46.     { "whois", "USER/A", 1, &rexx_whoisHook },
  47.     { "download", "NUM/A/N", 1, &rexx_downloadHook },
  48.     { NULL, NULL, 0, NULL }
  49. };
  50.  
  51. ULONG gRC;
  52.  
  53.  
  54. MUIF rexx_con(REG(a0) struct Hook *h,REG(a2) Object *app, REG(a1) char **array)
  55. {
  56.     if (gui_onlinestate < CONNECTING) nap_login();
  57.     return(0);
  58. }
  59.  
  60.  
  61. MUIF rexx_dis(REG(a0) struct Hook *h,REG(a2) Object *app, REG(a1) char **array)
  62. {
  63.     nap_logout();
  64.     set(gui->stat, MUIA_Text_Contents, MSG_STATUS2_NOTCONNECTED);
  65.     return(0);
  66. }
  67.  
  68.  
  69. MUIF rexx_ison(REG(a0) struct Hook *h,REG(a2) Object *app, REG(a1) char **array)
  70. {
  71.     if (gui_onlinestate == ONLINE) return 1;
  72.     else return 0;
  73. }
  74.  
  75.  
  76. MUIF rexx_search(REG(a0) struct Hook *h,REG(a2) Object *app, REG(a1) char **array)
  77. {
  78.     gRC = 0;
  79.  
  80.     if (gui_onlinestate < ONLINE) return 15;
  81.  
  82.     DoMethod(gui->searchpanel, SEARCH_GO, array[0]);
  83.     DoMethod(gui->searchpanel, SEARCH_GETSTATE);
  84.     if (search_state == 1) do {
  85.         nap_listen();
  86.         DoMethod(gui->searchpanel, SEARCH_GETSTATE);
  87.     }
  88.     while (search_state == 1);
  89.  
  90.     if (search_state == 2) DoMethod(gui->searchpanel, SEARCH_FILLSTEM, array[1]);
  91.     else gRC = 10;
  92.  
  93.     return gRC;
  94. }
  95.  
  96.  
  97. MUIF rexx_sstat(REG(a0) struct Hook *h,REG(a2) Object *app, REG(a1) char **array)
  98. {
  99.     DoMethod(gui->searchpanel, SEARCH_GETSTATE);
  100.     return (ULONG)search_state;
  101. }
  102.  
  103.  
  104. MUIF rexx_whois(REG(a0) struct Hook *h,REG(a2) Object *app, REG(a1) char **array)
  105. {
  106.     if (gui_onlinestate == ONLINE) nap_sendbuf(NAPC_WHOIS, array[0]);
  107.     return(0);
  108. }
  109.  
  110.  
  111. MUIF rexx_download(REG(a0) struct Hook *h,REG(a2) Object *app, REG(a1) char **array)
  112. {
  113.     gRC = 0;
  114.  
  115.     DoMethod(gui->searchpanel, SEARCH_DOWNLOAD, *(long *)array[0]);
  116.  
  117.     return gRC;
  118. }
  119.  
  120.  
  121. u_long rexx_sendcommand(char *port, char *com)
  122. {
  123.     struct MsgPort *me,*him;
  124.     struct RexxMsg *rmsg;
  125.     u_long rc=0;
  126.  
  127.     if (me = CreateMsgPort()) {
  128.         if (rmsg = CreateRexxMsg(me,NULL,NULL)) {
  129.             if (rmsg->rm_Args[0] = CreateArgstring(com, strlen(com))) {
  130.                 rmsg->rm_Action = RXCOMM;
  131.                 Forbid();
  132.                 him = FindPort(port);
  133.                 Permit();
  134.                 if (him) {
  135.                     PutMsg(him, (struct Message *)rmsg);
  136.                     WaitPort(me);
  137.                     GetMsg(me);
  138.                     rc = rmsg->rm_Result1;
  139. /*                    if (!rc && rmsg->rm_Result2) DeleteArgstring(rmsg->rm_Result2);*/
  140.                 }
  141.                 DeleteArgstring(rmsg->rm_Args[0]);
  142.             }
  143.             DeleteRexxMsg(rmsg);
  144.         }
  145.         DeleteMsgPort(me);
  146.     }
  147.     return rc;
  148. }
  149.  
  150.  
  151. void rexx_execute(char *com, char *argfmt, ...)
  152. {
  153.     static char buf[1024];
  154.     char *p;
  155.     va_list ap;
  156.  
  157.     p = buf + sprintf(buf,"Run <>NIL: RexxC:RX %s ",com);
  158.     if(argfmt) {
  159.         va_start(ap,argfmt);
  160.         vsprintf(p,argfmt,ap);
  161.         va_end(ap);
  162.     }
  163.  
  164.     Execute(buf, 0, 0);
  165. }
  166.